package com.ruoyi.system.service.wx.pay;

import com.ruoyi.system.domain.appvo.PayAllAccount;
import com.ruoyi.system.domain.wx.pay.WxPayInfo;

import java.util.List;
import java.util.Map;

/**
 * 支出明细Service接口
 * 
 * @author mic
 * @date 2023-08-14
 */
public interface IWxPayInfoService 
{
    /**
     * 查询支出明细
     * 
     * @param payId 支出明细主键
     * @return 支出明细
     */
    public WxPayInfo selectWxPayInfoByPayId(String payId);

    /**
     * 查询支出明细列表
     * 
     * @param wxPayInfo 支出明细
     * @return 支出明细集合
     */
    public List<WxPayInfo> selectWxPayInfoList(WxPayInfo wxPayInfo);

    /**
     * 新增支出明细
     * 
     * @param wxPayInfo 支出明细
     * @return 结果
     */
    public int insertWxPayInfo(WxPayInfo wxPayInfo);

    /**
     * 修改支出明细
     * 
     * @param wxPayInfo 支出明细
     * @return 结果
     */
    public int updateWxPayInfo(WxPayInfo wxPayInfo);

    /**
     * 批量删除支出明细
     * 
     * @param payIds 需要删除的支出明细主键集合
     * @return 结果
     */
    public int deleteWxPayInfoByPayIds(String[] payIds);

    /**
     * 删除支出明细信息
     * 
     * @param payId 支出明细主键
     * @return 结果
     */
    public int deleteWxPayInfoByPayId(String payId);

    /**
     * 时间倒叙list
     * @param limit 限制查询条数
     * @return
     */
    List<WxPayInfo> selectPayInfoDescDate(String userId, int limit);

    /**
     * 获取年份内的数据
     * @param map
     * @return
     */
    List<WxPayInfo> selectPayInfoListByYear(Map<String, Object> map);

    /**
     * 获取指定年月的数据
     * @param map
     * @return
     */
    List<WxPayInfo> selectPayInfoListByMonth(Map<String, Object> map);

    /**
     * 获取指定年月日的数据
     * @param map
     * @return
     */
    List<WxPayInfo> selectPayInfoListByDay(Map<String, Object> map);

    /**
     * 支付明细数据汇总处理, 类型分组求和
     */
    List<PayAllAccount> groupTypeSum(List<WxPayInfo> wxPayInfos);

    List<Map<String,Double>> selectInfoGroupYear(WxPayInfo payInfo);

    List<Map<String, Double>> selectInfoGroupMonth(WxPayInfo payInfo);

    List<WxPayInfo> selectByYearList(WxPayInfo info);
}
